
#include "thermalcam.h"


int releaseParamSet()
{


    return 0;
}


/*
测温基本参数配置结构体。NET_DVR_THERMOMETRY_BASICPARAM
Members
    DWORD dwSize  结构体大小  
    BYTE byEnabled  使能：0- 不启用，1- 启用  
    BYTE byStreamOverlay  码流是否叠加温度信息：0- 否，1- 是  
*   BYTE  byPictureOverlay  抓图是否叠加温度信息：0- 否，1- 是  
    BYTE byThermometryRange  测温范围（这里以摄氏度为单位计算，其他单位由上层自行转换）：
                        0- 默认值，1- (-20~150)，2- (0~550)，3- (0~650），4-  （-40~150），5-（0~1200），6- （-20-120），0xff- 自动  
    BYTE byThermometryUnit  测温单位（所有测温配置功能中温度参数对应的单位）: 0- 摄氏度（℃），1- 华氏度（℉），2- 开尔文(K)  
    BYTE byThermometryCurve  测温曲线模式显示方式：0- 关闭，1- 模式1(横向温度趋势线模式)，2- 模式2(纵向温度趋势线模式)  
    BYTE byFireImageModea  消防图像模式：0- 保留，1- 黑白模式，2- 热探测模式，3- 火场模式  
    BYTE byShowTempStripEnable  显示温度条使能：0- 否，1- 是  
    float fEmissivity  发射率(即物体向外辐射能量的本领，精确到小数点后两位)，取值范围：[0.01, 1.00] 该值对于不支持规则框以及预置点的设备使用  
    BYTE byDistanceUnit  距离单位: 0- 米(m)，1- 英尺(feet)，2-厘米（cm）  
    BYTE byEnviroHumidity  环境相对湿度，取值范围：0~100%  byRes2  保留，置为0  
    struTempColor  测温报警颜色  
    int iEnviroTemperature  环境温度，取值范围：-273~10000摄氏度  
    int iCorrectionVolume  测温修正量，取值范围：-100~100  
    BYTE bySpecialPointThermType  特殊测温点显示，按位表示：

    bit0-中心点测温：0-不显示，1-显示； 
    bit1-最高点测温：0-不显示，1-显示；  
    bit2-最低点测温：0-不显示，1-显示 

    BYTE byReflectiveEnabled  反射温度使能：0- 否，1- 是  
    WORD wDistance  距离，单位：米(m)，取值范围：[0,10000]  
    float fReflectiveTemperature  反射温度 精确到小数后一位  
    float fAlert  预警温度阈值，取值范围：-100.0-1000.0摄氏度（精确到小数点后一位）  
    float fAlarm  报警温度阈值，取值范围：-100.0-1000.0摄氏度（精确到小数点后一位）  
    float fThermalOpticalTransmittance  光学透过率，精确到小数点后3位，取值范围：[0.001,1.000]，默认1.000  
    float fExternalOpticsWindowCorrection  外部光学温度，取值范围：-40.0-80.0摄氏度，默认值20℃，实际以界面显示为准  
    BYTE byDisplayMaxTemperatureEnabled  显示最高温：0- 不显示，1- 显示  
    BYTE byDisplayMinTemperatureEnabled  显示最低温：0- 不显示，1- 显示  
    BYTE byDisplayAverageTemperatureEnabled  显示平均温：0- 不显示，1- 显示  
    BYTE byThermometryInfoDisplayposition  测温信息显示位置：0- 保留，1- 跟随规则，2- 屏幕左上角  
    DWORD dwAlertFilteringTime  温度预警等待时间，单位秒  
    DWORD dwAlarmFilteringTime  温度报警等待时间，单位秒  
    BYTE byemissivityMode  发射率配置类型： 1- 粗糙(0.95)，2- 较粗糙(0.80)，3- 较光滑(0.60)，4- 光滑(0.30)，0xff-  自定义(0.01-1.00)  
    BYTE bydisplayTemperatureInOpticalChannelEnabled  可见光显示温度信息使能：0- 不启用，1- 启用  
    BYTE byRes  保留，置为0 

Remarks
● 该结构体里面测温相关配置在测温模式为普通模式时有效。  
● 设备是否支持测温配置或者支持的参数能力，可以通过设备能力集进行判断，对应测温配置能力集(ThermometryBasicParam)，
相关接口：NET_DVR_GetSTDAbility，能力集类型：NET_DVR_GET_THERMOMETRY_BASICPARAM_CAPABILITIES。  
*/
int paramSet(const int luserID)
{
  	

    return 0;

}

int Demo_setIPCPasswd(LONG lUserID, const std::string oldPasswd, const std::string newPasswd)
{
    int iRet = -1;
    LONG lChannel = 33;

    NET_DVR_IPC_PASSWD struParams = {0};
    struParams.dwSize = sizeof(NET_DVR_IPC_PASSWD);
    strcpy(struParams.sOldPasswd, oldPasswd.c_str());
    strcpy(struParams.sNewPasswd, newPasswd.c_str());

    iRet = NET_DVR_SetDVRConfig(lUserID, NET_DVR_SET_DVR_IPC_PASSWD, lChannel, &struParams, sizeof(NET_DVR_IPC_PASSWD));
    if (!iRet)
    {
        printf("pyd---Set NET_DVR_SET_DVR_IPC_PASSWD error:%d\n", NET_DVR_GetLastError());
        return HPR_ERROR;
    }

    return HPR_OK;
}


/*
设备工作状态信息结构体。
Members
    dwDeviceStatic  设备的状态：0－正常；1－CPU占用率太高，超过85%；2－硬件错误，例如串口异常  
    struHardDiskStatic  硬盘状态  
    struChanStatic  通道状态  
    byAlarmInStatic  报警输入口的状态：0-没有报警；1-有报警  
    byAlarmOutStatic  报警输出口的状态：0-没有输出，1-有报警输出  
    dwLocalDisplay  本地显示状态：0-正常，1-不正常  
    byAudioChanStatus  表示语音通道的状态：0-未使用，1-使用中，0xff无效  
    byRes  保留，置为0 

*/
//Get device state
int Demo_GetDeviceState(LONG lUserID)
{
    printf("设备工作状态信息:\n");
    NET_DVR_WORKSTATE_V30    struWorkState;
    if (NET_DVR_GetDVRWorkState_V30(lUserID, &struWorkState))
    {
        printf("pyd---NET_DVR_GetDVRWorkState_V30 success.\n");
    } 
    else
    {
        printf("pyd---NET_DVR_GetDVRWorkState_V30 error, %d.\n", NET_DVR_GetLastError());
        return HPR_ERROR;
    }

    printf("  设备的状态：0－正常；1－CPU占用率太高, 2－硬件错误，例如串口异常 -> %d\n", struWorkState.dwDeviceStatic);
    //printf("硬盘状态:%d\n", struWorkState.struHardDiskStatic);
    //printf("通道状态:%d\n", struWorkState.struChanStatic);
    printf("  报警输入口的状态：0-没有报警；1-有报警 -> %d\n", *struWorkState.byAlarmInStatic);
    printf("  报警输出口的状态：0-没有输出，1-有报警输出 -> %d\n", *struWorkState.byAlarmOutStatic);
    printf("  本地显示状态：0-正常，1-不正常 -> %d\n", struWorkState.dwLocalDisplay);
    printf("  语音通道的状态：0-未使用，1-使用中，0xff无效 -> %d\n", *struWorkState.byAudioChanStatus);
    return HPR_OK;
}


/*
设备网络状态结构体。
Members
    dwSize  结构体大小  
    dwPreview  预览，单位：kbitps  
    dwPlayback  回放，单位：kbitps  
    dwIPCModule  IPC接入，单位：kbitps  
    dwNetDiskRW  网盘读写，单位：kbitps  
    byRes  保留，置为0 
*/
int Demo_GetDeviceNetUsingInfo(LONG lUserID)    // not use
{
    int iRet = -1;
    DWORD uiReturnLen = 0;
    LONG lChannel = 0;

    NET_DVR_DEVICE_NET_USING_INFO struParams = {0};
    struParams.dwSize = sizeof(NET_DVR_DEVICE_NET_USING_INFO);

    iRet = NET_DVR_GetDVRConfig(lUserID, NET_DVR_GET_DEVICE_NET_USING_INFO, lChannel, \
        &struParams, sizeof(NET_DVR_DEVICE_NET_USING_INFO), &uiReturnLen);
    if (!iRet)
    {
        printf("pyd---Get NET_DVR_DEVICE_NET_USING_INFO error:%d\n", NET_DVR_GetLastError());
        return HPR_ERROR;
    }
    printf("pyd---dwPreview:%d   预览，单位：kbitps \n", struParams.dwPreview);
    printf("pyd---dwPlayback:%d  回放，单位：kbitps \n", struParams.dwPlayback);
    printf("pyd---dwIPCModule:%d IPC接入，单位：kbitps  \n", struParams.dwIPCModule);
    printf("pyd---dwNetDiskRW:%d 网盘读写，单位：kbitps  \n", struParams.dwNetDiskRW);

    return HPR_OK;
}